iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
AI & Data

用Python程式進行股票技術分析系列 第 24

Day24 目標價估算

  • 分享至 

  • xImage
  •  

目標價估算工具

有以下幾種目標價估算工具:

  • 圖形學派估算法:1.頭部、底形、2.連續型
  • 指標學派估算法:3.黃金切割率估算法
  • 4.機構評等估價法

為了搭配明天Day25的交易系統討論,今天只會談到圖形學派估算法中的底部型態。

圖形學派估算法

出現底部型態: W底(雙重底)、頭肩底、多重底、弧形底;幾乎看不出來什麼底就是弧形底。在這邊要特別討論一下弧形底,在Day12型態理論的討論中我並沒有放上弧形底的圖例解說;主因在於使用轉折方式要有效識別弧形底並不容易,並且國外的軟體大多也不會去識別弧形底。針對這種較不規則型態的識別,會放在賽程後段(Day26)再來做進階討論。
找底部型態第一個要件:要先把趨勢線畫出來,這裡的趨勢線指的是頸線(請參照Day12與Day13內容)。做底部型態估算目標價的統一策略都一樣,若要在看盤軟體上進行估算之程序如下:

  • 找出底部型態的最低點
  • 從最低點往上拉一條垂直的直線到頸線
  • 將上一步的直線複製一份並放至突破點(把直線下端與突破點連接),此時直線的上端就是目標價

以下程式實作會用Day1「主觀性質客觀化」的方式一(將在看盤軟體繪製的圖形與線段以人工方式轉換成數據)來展示前述程序的程式化。

程式實作:人工方式估算底部型態目標價

這是弧形底,暫時無法透過程序進行識別;因此以人工方式設定型態頸線:

# 手動設定轉折點
neckline_x = [date_to_index(df_k_line,'2022-12-08'),date_to_index(df_k_line,'2023-02-01')]
neckline_y = [df_k_line.iloc[neckline_x[0]]['Close'],df_k_line.iloc[neckline_x[1]]['Open']]
slope,intercept = np.polyfit(neckline_x,neckline_y,1)

# 從轉折點設定頸線
neckline_start_date = '2022-10-06'
neckline_start_price = slope * date_to_index(df_k_line,neckline_start_date) + intercept
neckline_end_date = '2023-06-05'
neckline_end_price = slope * date_to_index(df_k_line,neckline_end_date) + intercept

接下來找出底部型態的最低點:

minimum_close_price_date = df_k_line['Close'].idxmin().strftime('%Y-%m-%d')
minimum_close_price = df_k_line['Close'].min()

然後計算最低點位置對應至頸線價格(也就是做從最低點往上拉到頸線的動作):

on_neckline_price = slope * date_to_index(df_k_line,minimum_close_price_date) + intercept

把「最低點位置對應頸線」的價格減去「最低點」的價格再加上「突破點(頸線結束點)」的價格就等於目標價:

target_price = (on_neckline_price - minimum_close_price) + neckline_end_price

把這上述計算結果以圖形呈現,程式碼如下:

# 設定頸線與目標價
seq_of_seq_of_points=[
    [(neckline_start_date,neckline_start_price),(neckline_end_date,neckline_end_price)],
    [(minimum_close_price_date,minimum_close_price),(minimum_close_price_date,on_neckline_price)],
    [(neckline_end_date,neckline_end_price),(neckline_end_date,target_price)]
                     ]

# 繪出K線圖
kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=list(added_plots.values()), alines=dict(alines=seq_of_seq_of_points, linewidths=(1.5,3,3), colors=('xkcd:red','xkcd:blue','xkcd:blue'), alpha=0.6),datetime_format='%Y-%m-%d')
mpf.plot(df_k_line,**kwargs)

程式執行結果如下所示:
Imgur

程式實作:使用頭肩型態識別演算法進行型態辨識與計算目標價

在Day14有提到頭肩型態的演算法,用頭肩型態識別函式很容易就可以計算目標價。程式碼如下所示:

# 頭肩型態識別函式已經整合到myutils套件中
patterns = myutils.FindingHeadShoulderPatterns(df_k_line, 10)

for pattern in patterns :
    pattern_points_len = len(np.array(df_k_line['Close']))
    pattern_points = np.array([np.nan]*pattern_points_len)
    head_shoulder_points = pattern['points']
    pattern_points[head_shoulder_points[0][0]] = head_shoulder_points[0][2]
    pattern_points[head_shoulder_points[1][0]] = head_shoulder_points[1][2]
    pattern_points[head_shoulder_points[2][0]] = head_shoulder_points[2][2]
    pattern_points[head_shoulder_points[3][0]] = head_shoulder_points[3][2]
    pattern_points[head_shoulder_points[4][0]] = head_shoulder_points[4][2]
    head_shoulder_neckline = pattern['neckline']
    head_shoulder_head     = pattern['head']
    # 試算目標價
    target_price = head_shoulder_head['height'] + head_shoulder_neckline['end_price']
    print('目標價 = 頭部高度({:.2f})+ 頸線結束價格({:.2f})= {:.2f}'.format(head_shoulder_head['height'],head_shoulder_neckline['end_price'],target_price))
    # 設定K線格式
    mc = mpf.make_marketcolors(up='xkcd:light red', down='xkcd:almost black', inherit=True)
    s  = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)
    # 設定頸線
    seq_of_seq_of_points=[
        [(head_shoulder_neckline['start_date'],head_shoulder_neckline['start_price']),(head_shoulder_neckline['end_date'],head_shoulder_neckline['end_price'])]
    ]
    # 設定轉折點
    apds = [
        mpf.make_addplot(pattern_points,type='scatter',marker='o',markersize=50,color='xkcd:sky blue')
    ]
    # 繪出K線圖
    kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=apds,alines=dict(alines=seq_of_seq_of_points, linewidths=1.2, colors='xkcd:azure', alpha=0.6), datetime_format='%Y-%m-%d')
    mpf.plot(df_k_line,**kwargs)

程式碼執行結果如下:
Imgur
完整的程式碼請參照「第二十四天:目標價估算.ipynb」。


上一篇
Day23 其他的技術指標(2)
下一篇
Day25 建立一個交易系統
系列文
用Python程式進行股票技術分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言